
// 1.导入express
var express = require('express')
var app = express()
var connection = require('../db/sql')
const svgCaptcha = require('svg-captcha')
var router = express.Router()
const path = require('path');
const jwt = require('jwt-simple') //token
const bcrypt = require('bcryptjs')
// 随机字符串
// var salt = bcrypt.genSaltSync(10)
// var pwd1 = bcrypt.hashSync('123456', salt)
// console.log(pwd1);
// var isOk = bcrypt.compareSync('123456', pwd1)
// console.log(isOk);
// 用 express.Router() 函数创建路由对象

// 3.挂载具体的路由
router.use(function timeLog(req, res, next) {
  // console.log('Time: ', Date.now())
  next()
})

/* 图片验证码接口 */
router.get('/captcha', (req, res) => {
  // 设置字母随机验证码相关属性
  let options = {
    size: 4, // 4个字母
    noise: 1, // 干扰线2条
    color: true, // 文字颜色
    background: "#666", // 背景颜色
    width: 90,
    height: 30,
    fontSize: 34,
    ignoreChars: '0oO1ilI'
    // 数字的时候，设置下面属性。最大，最小，加或者减
    // mathMin: 1,
    // mathMax: 30,
    // mathOperator: "+",
  }
  //这里可以分为字母和数字随机验证码和数字算数随机验证码,
  //我就先展示字母和数字随机验证码了,
  //如果想尝试数字算数随机验证码可以将下一行取消注释,将数字算数验证码解开注释即可
  let captcha = svgCaptcha.create(options) //字母和数字随机验证码
  // let captcha = svgCaptcha.createMathExpr(options) //数字算数随机验证码
  let { text, data } = captcha
  req.session.captcha = text.toLowerCase()
  res.type('svg')
  res.status(200)
  res.send({ img: data, str: text, status: 200 })
})

/* 登录接口 */
router.post('/login', async (req, res) => {
  const sessionCaptcha = req.session.captcha
  const userCaptcha = req.body.captcha.toLowerCase()
  const { username, password } = req.body
  // 输入验证
  if (!username || !password || !userCaptcha) {
    res.json({
      status: 0,
      msg: '请填写用户名、密码和验证码'
    });
    return;
  }
  // 验证码验证
  if (sessionCaptcha !== userCaptcha) {
    res.json({
      status: -1,
      msg: '验证码错误'
    });
    return;
  }

  try {
    // 查询用户是否存在
    const queryStr = "SELECT name , password FROM user WHERE name= ?"
    connection.query(queryStr, [username], function (error, results) {
      if (results && results.length) {
        bcrypt.compare(password, results[0].password, (err, isOk) => {
          if (isOk) {
            res.json({
              status: 200,
              msg: '登录成功',
              data: {
                token: createToken(results[0])
              },

            })
            function createToken(data) {
              return jwt.encode({
                exp: Date.now() + (1000 * 60 * 60 * 24),
                info: data
              }, require('../config/index').tokenKey)
            }
          } else {
            res.json({
              status: -1,
              msg: '密码错误'
            });
          }
        })
      } else {
        res.json({
          status: -1,
          msg: '用户不存在'
        });
      }
    })

  } catch (error) {
    console.log(error);
    res.json({
      status: -1,
      msg: '数据库错误'
    });
  }
})
// 4.向外导出路由对象
module.exports = router